package org.monster.context.core.parameter;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Locale;

/**
 * Http响应装饰
 *
 * @author Monster
 */
public class HttpResponseFacade implements HttpServletResponse {

    /**
     * 响应
     */
    private HttpResponse response = null;

    /**
     * 构造方法
     *
     * @param response 响应
     */
    public HttpResponseFacade(HttpResponse response) {
        this.response = response;
    }

    /**
     * 刷新 缓冲器
     *
     * @throws IOException 输入输出异常
     */
    @Override
    public void flushBuffer() throws IOException {
        response.flushBuffer();
    }

    /**
     * 获取 缓冲器大小
     *
     * @return 缓冲器大小
     */
    @Override
    public int getBufferSize() {
        return response.getBufferSize();
    }

    /**
     * 设置 缓冲器大小
     *
     * @param bufferSize 缓冲器大小
     */
    @Override
    public void setBufferSize(int bufferSize) {
        response.setBufferSize(bufferSize);
    }

    /**
     * 获取 字符串编码
     *
     * @return 字符串编码
     */
    @Override
    public String getCharacterEncoding() {
        return response.getCharacterEncoding();
    }

    /**
     * 设置 字符串编码
     *
     * @param characterEncoding 字符串编码
     */
    @Override
    public void setCharacterEncoding(String characterEncoding) {
        response.setCharacterEncoding(characterEncoding);
    }

    /**
     * 获取 内容类型
     *
     * @return 内容类型
     */
    @Override
    public String getContentType() {

        return response.getContentType();
    }

    /**
     * 设置 内容类型
     *
     * @param contentType 内容类型
     */
    @Override
    public void setContentType(String contentType) {
        response.setContentType(contentType);
    }

    /**
     * 获取 语言环境
     *
     * @return 语言环境
     */
    @Override
    public Locale getLocale() {
        return response.getLocale();
    }

    /**
     * 设置 语言环境
     *
     * @param locale 语言环境
     */
    @Override
    public void setLocale(Locale locale) {
        response.setLocale(locale);
    }

    /**
     * 获取 服务者输出流
     *
     * @return 输出流
     * @throws IOException 输入输出异常
     */
    @Override
    public ServletOutputStream getOutputStream() throws IOException {
        return response.getOutputStream();
    }

    /**
     * 获取 写入器
     *
     * @return 写入器
     */
    @Override
    public PrintWriter getWriter() {
        return response.getWriter();
    }

    /**
     * 是否 提交过
     *
     * @return 布尔
     */
    @Override
    public boolean isCommitted() {
        return response.isCommitted();
    }

    /**
     * 重置
     */
    @Override
    public void reset() {
        response.reset();
    }

    /**
     * 重置 缓冲器
     */
    @Override
    public void resetBuffer() {
        response.resetBuffer();
    }

    /**
     * 设置 长度
     *
     * @param length 长度
     */
    @Override
    public void setContentLength(int length) {
        response.setContentLength(length);
    }

    /**
     * 获取cookie
     *
     * @param cookie cookie
     */
    @Override
    public void addCookie(Cookie cookie) {
        response.addCookie(cookie);
    }

    /**
     * 添加 日期头
     *
     * @param name 名称
     * @param time 时间戳
     */
    @Override
    public void addDateHeader(String name, long time) {
        response.addDateHeader(name, time);
    }

    /**
     * 添加 头
     *
     * @param name  名称
     * @param value 值
     */
    @Override
    public void addHeader(String name, String value) {
        response.addHeader(name, value);

    }

    /**
     * 添加 初始化头
     *
     * @param name  名称
     * @param value 值
     */
    @Override
    public void addIntHeader(String name, int value) {
        response.addIntHeader(name, value);
    }

    /**
     * @param name
     * @return
     */
    @Override
    public boolean containsHeader(String name) {
        return response.containsHeader(name);
    }

    /**
     * 编码 重定向url
     *
     * @param url url
     * @return url
     */
    @Override
    public String encodeRedirectURL(String url) {
        return response.encodeRedirectURL(url);
    }

    /**
     * 编码 重定向url
     *
     * @param url url
     * @return url
     */
    @Override
    public String encodeRedirectUrl(String url) {
        return response.encodeRedirectUrl(url);
    }

    /**
     * 编码 url
     *
     * @param url url
     * @return url
     */
    @Override
    public String encodeURL(String url) {
        return response.encodeURL(url);
    }

    /**
     * 编码 url
     *
     * @param url url
     * @return url
     */
    @Override
    public String encodeUrl(String url) {
        return response.encodeUrl(url);
    }

    /**
     * 获取 头
     *
     * @param name 名称
     * @return 头
     */
    @Override
    public String getHeader(String name) {
        return response.getHeader(name);
    }

    /**
     * 获取 头名称 集合
     *
     * @return 头名称 集合
     */
    @Override
    public Collection<String> getHeaderNames() {
        return response.getHeaderNames();
    }

    /**
     * 获取 头名称 集合
     *
     * @return 头名称 集合
     */
    @Override
    public Collection<String> getHeaders(String name) {
        return response.getHeaders(name);
    }

    /**
     * 获取 状态
     *
     * @return 状态
     */
    @Override
    public int getStatus() {
        return response.getStatus();
    }

    /**
     * @param code
     */
    @Override
    public void setStatus(int code) {
        response.setStatus(code);
    }

    /**
     * 发送 错误码
     *
     * @param errorCode 错误码
     * @throws IOException 输入输出异常
     */
    @Override
    public void sendError(int errorCode) throws IOException {
        response.sendError(errorCode);
    }

    /**
     * 发送 错误
     *
     * @param errorCode    错误码
     * @param errorMessage 错误消息
     * @throws IOException 输入输出异常
     */
    @Override
    public void sendError(int errorCode, String errorMessage) throws IOException {
        response.sendError(errorCode, errorMessage);
    }

    /**
     * 发送 重定向
     *
     * @param url url
     * @throws IOException 输入输出异常
     */
    @Override
    public void sendRedirect(String url) throws IOException {
        response.sendRedirect(url);
    }

    /**
     * 设置 日期头
     *
     * @param name 名称
     * @param time 时间戳
     */
    @Override
    public void setDateHeader(String name, long time) {
        response.setDateHeader(name, time);
    }

    /**
     * @param key 键
     * @param val 值
     */
    @Override
    public void setHeader(String key, String val) {
        response.setHeader(key, val);
    }

    /**
     * 设置 初始化头
     *
     * @param name  名称
     * @param value 值
     */
    @Override
    public void setIntHeader(String name, int value) {
        response.setIntHeader(name, value);
    }

    /**
     * 设置 状态
     *
     * @param code 状态码
     * @param desc 说明
     */
    @Override
    public void setStatus(int code, String desc) {
        response.setStatus(code, desc);

    }
}
